"""
日志配置模块
Logger Configuration Module

提供统一的日志配置功能，仅输出到文件，避免与控制台print输出重复
Provides unified logging configuration with file-only output to avoid duplication with console prints
"""

import logging
import os
import sys
from pathlib import Path
from datetime import datetime
from typing import Tuple

# 全局日志器实例，防止重复初始化
_global_logger = None
_global_log_file = None

def setup_logger(name: str = "planner_system", log_dir: str = "logs") -> Tuple[logging.Logger, str]:
    """
    设置日志器
    
    Args:
        name: 日志器名称
        log_dir: 日志文件目录
        
    Returns:
        Tuple[logging.Logger, str]: 日志器实例和日志文件路径
    """
    global _global_logger, _global_log_file
    
    # 如果已经初始化，直接返回
    if _global_logger is not None:
        return _global_logger, _global_log_file
    
    # 创建日志目录
    log_path = Path(log_dir)
    log_path.mkdir(exist_ok=True)
    
    # 生成日志文件名（按时间）
    log_filename = log_path / f"planner_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
    _global_log_file = str(log_filename)
    
    # 创建日志器
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    
    # 清除已有的处理器
    logger.handlers.clear()
    
    # 创建格式化器
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 仅使用文件处理器，避免与控制台print输出重复
    file_handler = logging.FileHandler(log_filename, encoding='utf-8')
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    
    # 防止日志传播到根日志器
    logger.propagate = False
    
    _global_logger = logger
    
    # 记录初始化信息
    logger.info(f"日志系统初始化完成 - 日志文件: {log_filename}")
    
    return logger, _global_log_file

def get_logger(name: str = "planner_system") -> logging.Logger:
    """
    获取日志器实例
    
    Args:
        name: 日志器名称
        
    Returns:
        logging.Logger: 日志器实例
    """
    logger, _ = setup_logger(name)
    return logger

def get_log_file_path() -> str:
    """
    获取当前日志文件路径
    
    Returns:
        str: 日志文件路径
    """
    global _global_log_file
    if _global_log_file is None:
        _, _global_log_file = setup_logger()
    return _global_log_file